// 导入 老师 模型
import { Teacher } from "../modle/Teacher.js";
// 导入 Op 模块
import { Op } from "sequelize";
// 导入 url 模块
import url from "url";

/* 查询所有老师信息、查询含有关键字的老师 */
function selectAllList() {
  // 返回异步函数
  return async (ctx, next) => {
    // 响应信息
    let res;

    // 声明老师列表
    let teachers;

    // 获取 查询的关键字
    const query = url.parse(ctx.url, true).query.query || null;

    // 判断是否有 查询的关键字
    if (query) {
      // 查询含有 关键字的老师
      teachers = await Teacher.findAll({
        // 条件查询
        where: {
          // 模糊查询
          [Op.or]: [
            // 姓名
            {
              teacherName: { [Op.like]: `%${query}%` },
            },
            // 年龄
            {
              teacherAge: { [Op.like]: `%${query}%` },
            },
            // 性别
            {
              teacherSex: { [Op.like]: `%${query}%` },
            },
            // 联系方式
            {
              phone: { [Op.like]: `%${query}%` },
            },
            // 教学班级
            {
              className: { [Op.like]: `%${query}%` },
            },
          ],
        },
      });
    } else {
      // 查询所有老师信息
      teachers = await Teacher.findAll();
    }

    // 判断是否查询到老师信息列表
    if (teachers) {
      // 如果列表有老师
      if (teachers.length > 0) {
        // 查询成功
        res = {
          code: 200,
          message: "查询成功",
          data: teachers,
        };
      }
      // 如果列表为空
      else {
        // 暂无数据
        res = {
          code: 200,
          message: "暂无数据",
          data: null,
        };
      }
    } else {
      // 查询异常
      res = {
        code: 500,
        message: "查询异常",
        data: null,
      };
    }

    // 响应状态码
    ctx.status = 200;

    // 响应 Json 数据
    ctx.body = res;
  };
}

/* 查询指定 id 的老师 */
function selectById() {
  // 返回异步函数
  return async (ctx, next) => {
    // 响应信息
    let res;

    // 拿到 请求id
    const id = parseInt(ctx.params.id.replace(":", "")) || 0;

    // 查询所有老师信息
    const teacher = await Teacher.findByPk(id);

    // 如果有查询到老师信息
    if (teacher) {
      // 查询成功
      res = {
        code: 200,
        message: "查询成功",
        data: teacher,
      };
    } else {
      // 查无此人
      res = {
        code: 500,
        message: "老师不存在",
        data: null,
      };
    }
    // 响应状态码
    ctx.status = 200;

    // 响应 Json 数据
    ctx.body = res;
  };
}

/* 新增老师 */
function insert() {
  // 返回异步函数
  return async (ctx, next) => {
    // 响应信息
    let res;

    // 拿到请求对象
    const obj = ctx.request.body;

    // 新增老师
    const isOk = await Teacher.create(obj);

    // 判断是否新增成功
    if (isOk) {
      // 新增成功
      res = {
        code: 200,
        message: "新增成功",
        data: null,
      };
    } else {
      // 新增失败
      res = {
        code: 500,
        message: "新增失败",
        data: null,
      };
    }

    // 响应状态码
    ctx.status = 200;

    // 响应 Json 数据
    ctx.body = res;
  };
}

/* 修改老师指定 id 的老师 */
function updateById() {
  // 返回异步函数
  return async (ctx, next) => {
    // 响应信息
    let res;

    // 拿到 请求id
    const id = parseInt(ctx.params.id.replace(":", "")) || 0;

    // 拿到请求对象
    const obj = ctx.request.body;

    // 老师是否存在
    const isOk = await Teacher.findByPk(id);

    // 判断指定 id 的老师是否存在
    if (isOk) {
      // 老师存在，可以修改老师
      const updateIsOk = await Teacher.update(obj, { where: { id } });

      // 判断是否修改成功
      if (updateIsOk) {
        // 修改成功
        res = {
          code: 200,
          message: "修改成功",
          data: null,
        };
      } else {
        // 修改失败
        res = {
          code: 500,
          message: "修改失败",
          data: null,
        };
      }
    } else {
      // 老师不存在,修改失败
      res = {
        code: 500,
        message: "老师不存在,修改失败",
        data: null,
      };
    }

    // 响应状态码
    ctx.status = 200;

    // 响应 Json 数据
    ctx.body = res;
  };
}

/* 删除指定 id 的老师 */
function deleteById() {
  // 返回异步函数
  return async (ctx, next) => {
    // 响应信息
    let res;

    // 拿到 请求id
    const id = parseInt(ctx.params.id.replace(":", "")) || 0;

    // 老师是否存在
    const teacher = await Teacher.findByPk(id);

    // 判断指定 id 的老师是否存在
    if (teacher) {
      // 老师存在,可以删除老师
      const isOk = await Teacher.destroy({ where: { id } });

      // 判断是否删除成功
      if (isOk) {
        // 删除成功
        res = {
          code: 200,
          message: "删除成功",
          data: null,
        };
      } else {
        // 删除失败
        res = {
          code: 500,
          message: "删除失败",
          data: null,
        };
      }
    } else {
      // 老师不存在，不能删除
      res = {
        code: 500,
        message: "老师不存在，不能删除",
        data: null,
      };
    }

    // 响应状态码
    ctx.status = 200;

    // 响应 Json 数据
    ctx.body = res;
  };
}

// 导出路由注册配置
export default [
  {
    method: "get",
    url: "/teachers",
    fn: selectAllList(),
  },
  {
    method: "get",
    url: "/teachers/:id",
    fn: selectById(),
  },
  {
    method: "post",
    url: "/teachers",
    fn: insert(),
  },
  {
    method: "put",
    url: "/teachers/:id",
    fn: updateById(),
  },
  {
    method: "delete",
    url: "/teachers/:id",
    fn: deleteById(),
  },
];
